var obj = {
    undefined: "淼叔",
    desc: "傻子"
}

console.log(obj);


function test(a, b) {
    //3. 形参 a = 1 ,b 为undefined
    console.log(a);
    c = 0;
    var c;
    a = 3;
    console.log(a);

    console.log(b);

    function b() {}

    function d() {}
    b = 2;
    console.log(b);
}
test(1)

/* 
预编译 四部曲:
1、 创建AO对象
2、 查找形参和变量声明， 将形参名和变量名作为AO对象的属性， 值为undefined
3、 将形参与实参统计
4、 查找函数声明， 函数名作为AO对象的属性， 函数体作为的值


1、 创建AO对象
Ao{
    
}
2、 查找形参和变量声明， 将形参名和变量名作为AO对象的属性， 值为undefined
Ao {
    a:undefined,
    b:undefined,
    c:undefined
}
3、 将形参与实参统一
Ao {
    a: 1,
    b: undefined,
    c: undefined
}
4、 查找函数声明， 函数名作为AO对象的属性， 函数体作为的值
Ao {
    a: 1,
    b: function b(){},
    c: undefined,
    d: function d(){}
}

预编译完成后就一行行的执行代码
第2行代码 ,输出 1 
第3行代码 ,就会把 Ao 对象中的 c 改为 0,
第4行代码直接跳过, 因为已经是声明提升了
第5行代码给 Ao 对象中的 a 赋值 3
第6行代码, 输出 3
第7行代码, 把 Ao 对象中的 b 赋值 2
第8行代码 输出 2
第9行代码和第 10 行代码因为函数提升,直接跳过
第11行代码输出 2

所以最后的答案是 1322 
最后的 AO 对象是

Ao {
    a: 3,
    b: 2
    c: 0,
    d: function d() {}
}


*/

// function test(a, b) {


//     //2.变量提升,函数声明,所以b() d()方法函数提升了
//     var c;

//     function b() {}

//     function d() {}
//     //1. 形参 a = 1 ,b 为undefined
//     console.log(a);
//     c = 0;

//     a = 3;
//     console.log(a);
//     b = 2;
//     console.log(b);
//     console.log(b);
// }
// test(1)